/**
 * 文件名：@SoaClientFeignPostRegister.java <br/>
 * 包名：cn.efunbox.afw.soa.client.netflix.feign <br/>
 * 项目名：afw-soa-client <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.soa.client.netflix.feign;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;

import cn.efunbox.afw.soa.client.annotation.SoaClientConfig;

/**
 * 类名：SoaClientFeignPostRegister  <br />
 *
 * 功能：使用spring cloud提供的feign支持完成注册
 *
 * @author xtwin <br />
 * 创建时间：2016年7月25日 上午10:50:15  <br />
 * @version 2016年7月25日
 */
public class SoaClientFeignPostRegister extends AbstractSoaClientFeignRegister implements BeanDefinitionRegistryPostProcessor {

	// 注册器，由接口注入
	private BeanDefinitionRegistry registry;

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年7月25日 上午11:02:00<br/>
	 * 
	 * @param beanFactory
	 * @throws BeansException <br/>
	 * @see org.springframework.beans.factory.config.BeanFactoryPostProcessor#postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory)
	 */
	@Override
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
		// 取得所有的注解配置bean
		String[] names = beanFactory.getBeanNamesForAnnotation(SoaClientConfig.class);
		
		if (null == names || names.length == 0) {
			return;
		}
		
		for (String name : names) {
			// 依次注册每个bean上的注解定义
			register(beanFactory.getType(name).getAnnotationsByType(SoaClientConfig.class));
		}
	}

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年7月25日 上午11:02:00<br/>
	 * 
	 * @param registry
	 * @throws BeansException <br/>
	 * @see org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry)
	 */
	@Override
	public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
		this.registry = registry;
	}

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年7月28日 上午10:16:53<br/>
	 * 
	 * @return <br/>
	 * @see cn.efunbox.afw.soa.client.register.AbstractSoaClientRegister#getRegistry()
	 */
	@Override
	protected BeanDefinitionRegistry getRegistry() {
		return registry;
	}
}